import axios from 'axios'

import { Toast } from 'vant'
import router from '@/router'

import store from '@/store'
const instance = axios.create({
    baseURL: 'http://toutiao.itheima.net/'
})

const refInstance = axios.create({
  baseURL: 'http://toutiao.itheima.net/'
})

// 给 instance 设置一个请求拦截器
instance.interceptors.request.use((config) => {
	 // 得到 token
     const token = store.state.token.token
     // 判断 token 是否存在
     if (token) {
       // 将 token 添加到请求头中
       config.headers.Authorization = `Bearer ${token}`
     }
	// config: 包含了所有的请求信息
    // 成功的回调函数
	return config
}, (error) => {
	// 失败的回调函数
	return Promise.reject(error)
})

//响应拦截器
instance.interceptors.response.use((response) => {
  return response
}, async (error) => {
  //得到错误状态码
  const status = error.response.status
  if(status === 401) {
    const refresh_token = store.state.token.refresh_token
    try {
      const res = await refInstance({
        url: '/v1_0/authorizations',
        method: 'PUT',
        headers: {
          Authorization: `Bearer ${refresh_token}`
        }
      })
      store.commit('setToken', {
        token: res.data.data.token,
        refresh_token: refresh_token
      })
      // 重新请求之前报错的请求
      return instance(error.config)
    } catch {
      Toast.fail('登录已过期')
      router.push('/login')
      return Promise.reject(new Error('refresh_token过期'))
    }
  }
  return Promise.reject(error)
})
export default instance